from flask import Blueprint, request, jsonify
from flask_jwt_extended import jwt_required
from model import Group, StudentCourse, Course, User  # 确保导入必要的模型
from extension import db  # 假设你在使用 Flask-SQLAlchemy
import random
from views.user import student_required,admin_required,assistant_required

groups_bp = Blueprint('groups', __name__)


@groups_bp.route('/get_courses/<student_id>', methods=['GET'])
@jwt_required()
@student_required
def get_courses(student_id):
    """
    获取学生所选课程的组信息。
    """
    # 获取学生所选课程的组信息
    courses = Course.query.join(StudentCourse).filter(StudentCourse.student_id == student_id).all()
    course_groups = {}

    for course in courses:
        groups = Group.query.filter_by(course_id=course.course_id).all()
        course_groups[course.course_id] = [group.group_id for group in groups]

    return jsonify(course_groups), 200


@groups_bp.route('/manage/<course_id>', methods=['POST'])
@jwt_required()
@admin_required
def manage_groups(course_id):
    """
    教师可以管理特定课程的学生组。
    接受 JSON 体，包含学生 ID 列表和组 ID。
    """
    data = request.json
    group_id = data.get('group_id')
    student_ids = data.get('student_ids')

    if not group_id or not student_ids:
        return jsonify({'msg': 'Group ID 和学生 ID 列表是必需的'}), 400

    # 清除该课程之前的组条目（如有必要）
    Group.query.filter_by(course_id=course_id, group_id=group_id).delete()

    # 将学生添加到指定的组中
    for student_id in student_ids:
        group_entry = Group(course_id=course_id, student_id=student_id, group_id=group_id)
        db.session.add(group_entry)

    db.session.commit()
    return jsonify({'msg': '学生成功添加到组'}), 201



@groups_bp.route('/get_course_groups', methods=['GET'])
@jwt_required()
@admin_required
def get_course_groups():
    # 查询该课程下的所有组信息

    course_id = request.args.get('course_id')

    groups = Group.query.filter_by(course_id=course_id).all()

    if not groups:
        return jsonify({'msg': '未找到该课程的学生组信息'}), 404

    course_groups = {}

    # 构建课程下每个组的学生列表
    for group in groups:
        if group.group_id not in course_groups:
            course_groups[group.group_id] = []
        # 将学生ID添加到对应组中
        user = User.query.filter_by(student_id=group.student_id).first()
        course_groups[group.group_id].append({
            'student_id': group.student_id,
            'student_name': user.name,
        })

    return jsonify({'course_id': course_id, 'groups': course_groups}), 200

